#include <iostream>

// 二叉树节点结构体定义
struct TreeNode
{
    int value;       // 节点的值
    TreeNode *left;  // 左子节点指针
    TreeNode *right; // 右子节点指针

    // 构造函数
    TreeNode(int x) : value(x), left(nullptr), right(nullptr) {}
};

TreeNode *Reverse(TreeNode *node)
{
    if (node == nullptr)
        return nullptr;
    std::swap(node->left, node->right);
    Reverse(node->left);
    Reverse(node->right);
    return node;
}

void PrevTravel(TreeNode *node)
{
    if (node == nullptr)
        return;
    std::cout << node->value << " ";
    PrevTravel(node->left);
    PrevTravel(node->right);
}

void show(TreeNode *root)
{
    PrevTravel(root);
    std::cout << std::endl;
}

int main()
{
    // 创建二叉树
    TreeNode *root = new TreeNode(4);
    root->left = new TreeNode(3);
    root->right = new TreeNode(6);
    root->left->left = new TreeNode(1);
    root->left->right = new TreeNode(2);
    root->right->left = new TreeNode(5);
    root->right->right = new TreeNode(8);
    show(root);
    Reverse(root);
    show(root);

    // 打印的地址, 不行
    //  std::cout<<root<<std::endl;
    //  std::cout<<root->left<<root->right<<std::endl;
    //  std::cout<<root->left->left<<root->left->right<<root->right->left<<root->right->right<<std::endl;

    return 0;
}